/*
 * Copyright (c) 2009 LastFM.Desktop Anton Pavlik.
 * All Rights Reserved.
 * 
 * You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, 
 * with or without modifications, and in Source or Object form, provided that You meet the following 
 * conditions:
 * 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
 *
 * 2. You must cause any modified files to carry prominent notices stating that You changed the files; 
 * and
 *
 * 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, 
 * patent, trademark, and attribution notices from the Source form of the Work, excluding those notices 
 * that do not pertain to any part of the Derivative Works.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * You may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 *
 * Unless required by applicable law or agreed to in writing, Licensor provides the Work 
 * (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties 
 * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. 
 * YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE WORK
 * AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE. 
 */
package org.shake.lastfm.model.xml;

import org.apache.commons.digester.Rule;
import org.xml.sax.Attributes;

public abstract class PropertyValueRule extends Rule
{
    private final String beanPart;
    private final String attrName;
    private final String attrValue;
    
    private boolean passed;
    private String bodyText;

    public PropertyValueRule(String attrName, String attrValue, String beanPart)
    {
        this.attrName = attrName;
        this.attrValue = attrValue;
        this.beanPart = beanPart;
    }
    
    @Override
    public void begin(String namespace, String name, Attributes attributes) throws Exception
    {
        int length = attributes.getLength();
        for (int i = 0; i < length; i++)
        {
            setPassed( attributes.getLocalName(i).equals(getAttrName()) && attributes.getValue(i).equals(getAttrValue()));
            if (isPassed())
            {
                break;
            }
        }
    }

    @Override
    public void body(String namespace, String name, String text) throws Exception
    {
        setBodyText( text.trim() );
    }
    
    public boolean isPassed()
    {
        return this.passed;
    }

    public void setPassed(boolean passed)
    {
        this.passed = passed;
    }

    public String getBodyText()
    {
        return this.bodyText;
    }

    public void setBodyText(String bodyText)
    {
        this.bodyText = bodyText;
    }

    public String getBeanPart()
    {
        return this.beanPart;
    }

    public String getAttrName()
    {
        return this.attrName;
    }

    public String getAttrValue()
    {
        return this.attrValue;
    }

    public abstract void end(String namespace, String name) throws Exception;

}